16.7 考慮すべき点
並行マークスイープGCが直面する問題の多くは、全ての並行GCで共通するものである。
設計、実装、デバッグが大変。
これに見合うのか? もっと楽な解決策でもいいんでは?
例えば世代別GCではどうか。これは平均停止時間は数ms程度で済むが、最悪ケースではもっと長い時間止まる。そういうことが困る時もある。
ロボットがコケそうになった時とかにGC走ってて死みたいな話のやつか。
一方並列コレクタの停止時間は、もっと短く、予想しやすい。うまい設計では停止時間を1ms以下に保証することとかもできる。
その他の並行マークスイープGCで起こる困り事として、ストップザワールドのマークスイープで発生することの一部も引き継ぐ。
非移動型だと断片化するとか。
でも非移動型にある、他の並行GCより優れた点として、(コレクタによっては)ヒープのトポロジが変わらないことがある。移動型コレクタでは、どのミューテータからみても移動したオブジェクトの参照が不可分に更新されてないといけない。これをサボれる。
並行マークスイープGCでは、他の並行GCと同様に、オブジェクトをどの色でわりつけることができる。
黒いミューテータは黒でわりつける必要があるが、灰色だとどの色ででもできるし、コレクタのフェーズ、新しいオブジェクトの性質やスイーパの進捗に応じて変えることもできる。
残りの章では並行コピーGCと並列圧縮GC、停止時間保証GCについて考える。